package model;

/**
 * Deze klasse zorgt voor het beheren van het klanten bestand. 
 * Klanten kunnen via de GUI worden toegevoegd, aangepast en verwijderd. 
 * 
 * @author Maurice & Eric
 */
public class Klant {

    private int klantnummer = -1;
    private LoginAccount loginAccount = null;
    private String naam = null;
    private String achternaam = null;
    private String straat = null;
    private String telefoonnummer = null;
    private String huisnummer = null;
    private String woonplaats = null;

    /**
     * Toevoegen van klant in Database controller.
     *
     * @param loginAccount
     * @param klantnummer
     * @param naam
     * @param achternaam
     * @param straat
     * @param telefoonnummer
     * @param huisnummer
     * @param woonplaats
     */
    public Klant(LoginAccount loginAccount, int klantnummer, String naam, String achternaam, String straat, String huisnummer, String telefoonnummer, String woonplaats) {
        this.loginAccount = loginAccount;
        this.klantnummer = klantnummer;
        this.naam = naam;
        this.achternaam = achternaam;
        this.straat = straat;
        this.telefoonnummer = telefoonnummer;
        this.huisnummer = huisnummer;
        this.woonplaats = woonplaats;
    }

    /**
     * Toevoegen van klant in Database controller.
     *
     * @param loginAccount
     * @param email
     * @param naam
     * @param achternaam
     * @param straat
     * @param telefoonnummer
     * @param huisnummer
     * @param woonplaats
     */
    public Klant(LoginAccount loginAccount, String naam, String achternaam, String straat, String huisnummer, String telefoonnummer, String woonplaats) {
        this.loginAccount = loginAccount;
        this.naam = naam;
        this.achternaam = achternaam;
        this.straat = straat;
        this.telefoonnummer = telefoonnummer;
        this.huisnummer = huisnummer;
        this.woonplaats = woonplaats;
    }

    /**
     * Constructor voor toevoegen nieuwe Klant in gui.
     *
     *
     * @param naam
     * @param achternaam
     * @param straat
     * @param huisnummer
     * @param telefoonnummer
     * @param woonplaats
     */
    public Klant(String naam, String achternaam, String straat, String huisnummer, String telefoonnummer, String woonplaats) {
        this.naam = naam;
        this.achternaam = achternaam;
        this.straat = straat;
        this.telefoonnummer = telefoonnummer;
        this.huisnummer = huisnummer;
        this.woonplaats = woonplaats;
    }

    /**
     * Constructor voor tonen bestaande Klant in gui.
     *
     *
     * @param klantnummer
     * @param naam
     * @param achternaam
     * @param straat
     * @param huisnummer
     * @param telefoonnummer
     * @param woonplaats
     */
    public Klant(int klantnummer, String naam, String achternaam, String straat, String huisnummer, String telefoonnummer, String woonplaats) {
        this.klantnummer = klantnummer;
        this.naam = naam;
        this.achternaam = achternaam;
        this.straat = straat;
        this.telefoonnummer = telefoonnummer;
        this.huisnummer = huisnummer;
        this.woonplaats = woonplaats;
    }

    public int getKlantnummer() {
        return klantnummer;
    }

    public String getNaam() {
        return naam;
    }

    public void setNaam(String naam) {
        this.naam = naam;
    }

    public String getAchternaam() {
        return achternaam;
    }

    public void setAchternaam(String achternaam) {
        this.achternaam = achternaam;
    }

    public String getStraat() {
        return straat;
    }

    public void setStraat(String adres) {
        this.straat = adres;
    }

    public String getTelefoonnummer() {
        return telefoonnummer;
    }

    public void setTelefoonnummer(String telefoonnummer) {
        this.telefoonnummer = telefoonnummer;
    }

    public String getHuisnummer() {
        return huisnummer;
    }

    public void setHuisnummer(String huisnummer) {
        this.huisnummer = huisnummer;
    }

    public String getWoonplaats() {
        return woonplaats;
    }

    public void setWoonplaats(String woonplaats) {
        this.woonplaats = woonplaats;
    }

    public LoginAccount getLoginAccount() {
        return loginAccount;
    }

    public void setKlantnummer(int klantnummer) {
        this.klantnummer = klantnummer;
    }
    
    
    /**
     * Indien op de Aanpassen knop wordt geklikt, en dus een klant wordt aangepast, dan wordt 
     * gecontroleerd of dat deze daadwerkelijk is aangepast.
     * @return 
     */
    @Override
    public int hashCode() {
        int hash = 5;
        hash = 97 * hash + this.klantnummer;
        hash = 97 * hash + (this.loginAccount != null ? this.loginAccount.hashCode() : 0);
        hash = 97 * hash + (this.naam != null ? this.naam.hashCode() : 0);
        hash = 97 * hash + (this.achternaam != null ? this.achternaam.hashCode() : 0);
        hash = 97 * hash + (this.straat != null ? this.straat.hashCode() : 0);
        hash = 97 * hash + (this.telefoonnummer != null ? this.telefoonnummer.hashCode() : 0);
        hash = 97 * hash + (this.huisnummer != null ? this.huisnummer.hashCode() : 0);
        hash = 97 * hash + (this.woonplaats != null ? this.woonplaats.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Klant other = (Klant) obj;
        if (this.klantnummer != other.klantnummer) {
            return false;
        }
        if (this.loginAccount != other.loginAccount && (this.loginAccount == null || !this.loginAccount.equals(other.loginAccount))) {
            return false;
        }
        if ((this.naam == null) ? (other.naam != null) : !this.naam.equals(other.naam)) {
            return false;
        }
        if ((this.achternaam == null) ? (other.achternaam != null) : !this.achternaam.equals(other.achternaam)) {
            return false;
        }
        if ((this.straat == null) ? (other.straat != null) : !this.straat.equals(other.straat)) {
            return false;
        }
        if ((this.telefoonnummer == null) ? (other.telefoonnummer != null) : !this.telefoonnummer.equals(other.telefoonnummer)) {
            return false;
        }
        if ((this.huisnummer == null) ? (other.huisnummer != null) : !this.huisnummer.equals(other.huisnummer)) {
            return false;
        }
        if ((this.woonplaats == null) ? (other.woonplaats != null) : !this.woonplaats.equals(other.woonplaats)) {
            return false;
        }
        return true;
    }

}
